There are many applications in which it is desirable to generate truly random numbers. For example, cryptography, system testing, and gaming all rely upon random number generators to perform their functions. Random number generation in cryptography is particularly significant. Cryptography is a central part of information security and related issues, such as authentication and access control. Cryptography is used in computer and network security for information confidentiality. Cryptography is also used in many applications encountered by individuals on a regular basis, such as security of ATM cards, computer passwords, and electronic commerce. However, generating a true random number sequence on a digital integrated circuit is a difficult task.
Most digital implementations of random number generators (RNGs) are in fact pseudo random number generators, such as linear feedback shift registers (LFSRs). An LFSR produces a predictable sequence of numbers which is repeated after some number of cycles. There are other types of RNGs such as Linear Congruential Generators (LCGs), Add With Carry Generators (AWCGs), Multiply With Carry Generators (MWCGs), and Inverse Congruential Generators (ICGs). These RNGs generally use formulas of the form x(n)=f(x(n−m)) and have predictable output streams. Other integrated circuit implementations use analog techniques such as measuring voltage noise in a resistor and then converting that measurement into digital numbers using an analog-to-digital converter (ADC). However, converting the analog noise signal requires special analog circuitry that is not found on digital integrated circuits.
Accordingly, there is a need for an improved method of and circuit for generating a random number in a digital circuit.